package com.mxj.userlogin.service.impl;/* 标准键盘布局
┌───┐   ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
│Esc│   │ F1│ F2│ F3│ F4│ │ F5│ F6│ F7│ F8│ │ F9│F10│F11│F12│ │P/S│S L│P/B│  ┌┐    ┌┐    ┌┐
└───┘   └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘  └┘    └┘    └┘
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
│~ `│! 1│@ 2│# 3│$ 4│% 5│^ 6│& 7│* 8│( 9│) 0│_ -│+ =│ BacSp │ │Ins│Hom│PUp│ │N L│ / │ * │ - │
├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
│ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │{ [│} ]│ | \ │ │Del│End│PDn│ │ 7 │ 8 │ 9 │   │
├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ├───┼───┼───┤ + │
│ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │: ;│" '│ Enter  │               │ 4 │ 5 │ 6 │   │
├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤     ┌───┐     ├───┼───┼───┼───┤
│ Shift  │ Z │ X │ C │ V │ B │ N │ M │< ,│> .│? /│  Shift   │     │ ↑ │     │ 1 │ 2 │ 3 │   │
├─────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤ E││
│ Ctrl│    │Alt │         Space         │ Alt│    │    │Ctrl│ │ ← │ ↓ │ → │ │   0   │ . │←─┘│
└─────┴────┴────┴───────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘
*
* 当我写下这个的时候，只有上帝和我能够看懂

* 现在，只有上帝能看懂了
 * @author mxj
 @date 2022/6/23 22:30
 */

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mxj.userlogin.dao.UserDao;
import com.mxj.userlogin.dao.UserlogDao;
import com.mxj.userlogin.dto.UserAddDto;
import com.mxj.userlogin.entity.User;
import com.mxj.userlogin.entity.UserLog;
import com.mxj.userlogin.ov.R;
import com.mxj.userlogin.service.intf.UserService;
import com.mxj.userlogin.util.JedisUtil;
import com.mxj.userlogin.util.PassUtils;
import com.mxj.userlogin.util.StringUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;


@Service
public class UserServiceImpl implements UserService {
    @Resource
    private UserDao dao;
    @Resource
    private UserlogDao logDao;

    public static final String KEY="TcTlIDBOUVqWc8KZnmqdzQ==";

    @Override
    public R checkPhone(String phone) {
        //1.校验参数
        if(StringUtils.hasLength(phone)) {

            //2.正则校验
            if (phone.matches("^1[3-9][0-9]{9}$")) {

                //3.查询数据库
                User user=dao.selectOne(new QueryWrapper<User>().eq("phone",phone));
                //4.校验手机号是否存在
                if(user==null){

                    //不存在，本次可以使用
                    return R.ok();
                }else {
                    return R.fail("请去登录！");
                }
            }
        }
        return R.fail("检查手机号！");
    }
    @Transactional //开启事务，一个方法有多个DML类型SQL语句
    @Override
    public R register(UserAddDto dto) {
        //1.校验参数
        if(dto!=null){
            if(StringUtil.isNotEmpty(dto.getPassword(),dto.getPhone())) {

                //2.校验手机号的短信验证码校验有没有通过
                if (JedisUtil.checkSet("xing:code:phones", dto.getPhone())) {

                    //3.密码转为密文
                    User user = new User();
                    user.setFlag(1);
                    user.setPhone(dto.getPhone());
                    user.setPassword(PassUtils.aesenc(KEY, dto.getPassword()));

                    //4.新增数据到数据库
                    if (dao.insert(user) > 0) {

                        //5.成功 记录日志
                        logDao.insert(new UserLog(user.getId(), "新用户注册", 1));

                        return R.ok();
                    }
                }
            }
        }
        return R.fail();
    }
}
